package cool.mylog.mylog2end.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import cool.mylog.mylog2end.bean.Log;
import org.apache.ibatis.annotations.*;

import java.util.ArrayList;
import java.util.List;

@Mapper

public interface LogMapper extends BaseMapper<Log> {

    /**
     * public的Log列表，首页展示
     *
     * @param skip  从第几个开始
     * @param limit 每页几个
     * @return Log对象列表
     */
    @Select("SELECT * FROM public LIMIT #{skip}, #{limit}")
    @ResultMap("logMap")
    List<Log> getPublics(Integer skip, Integer limit);

    /**
     * 通过用户ID分页查public列表
     * 注意，public表使用sendtime排序，这里要用logtime排序
     *
     * @param skip  从第几个开始
     * @param limit 每页几个
     * @return Log对象列表
     */
    @Select("SELECT * FROM public WHERE userid=#{userid} ORDER BY logtime DESC LIMIT #{skip}, #{limit}")
    @ResultMap("logMap")
    List<Log> getPublicsByUserid(Long userid, Integer skip, Integer limit);

    /**
     * 通过用户ID查全部mylog列表，不分页
     * 注意：没有tag
     *
     * @return Log对象列表
     */
    @Select("SELECT * FROM mylog WHERE userid=#{userid} ORDER BY logtime DESC")
    @ResultMap("logMap")
    List<Log> getMylogsByUserid(Long userid);

    /**
     * 通过用户id和log列表查属于它的id，或者为public的
     *
     * @param userid 所属用户
     * @param logIds id列表
     * @return Mylog列表
     */
    List<Log> getMyLogsByIds(Long userid, List<Long> logIds);


    /**
     * 通过用户ID查全部todo列表，不分页
     *
     * @return Log对象列表
     */
    @Select("SELECT * FROM todo WHERE userid=#{userid}")
    @ResultMap("logMap")
    List<Log> getTodosByUserid(Long userid);

    /**
     * 通过用户ID查全部tag列表，不分页
     *
     * @return Log对象列表
     */
    @Select("SELECT * FROM tag WHERE userid=#{userid} ORDER BY logtime DESC")
    @ResultMap("logMap")
    List<Log> getTagsByUserid(Long userid);

    /**
     * 通过用户ID查Log列表，全部log，分页
     * 注意：没有tag
     *
     * @param skip  从第几个开始
     * @param limit 每页几个
     * @return Log对象列表
     */
    @Select("SELECT * FROM mylog WHERE userid=#{userid} ORDER BY logtime DESC LIMIT #{skip}, #{limit}")
    @ResultMap("logMap")
    List<Log> getMylogsPageByUserId(Long userid, Integer skip, Integer limit);

    /**
     * 通过ID在public中获取单个Log
     *
     * @param id Log的id
     * @return 单个Log对象
     */
    @Select("SELECT * FROM public WHERE id=#{id}")
    @ResultMap("logMap")
    Log getPublicById(Long id);

    /**
     * 通过ID在log中获取单个Log
     * 既然都拿mylog了，不如直接在log里面拿
     *
     * @param id Log的id
     * @return 单个Log对象
     */
    @Select("SELECT * FROM log WHERE id=#{id}")
    @ResultMap("logMap")
    Log getLogById(Integer id);

    /**
     * 插入Log，send传进来没用，自动生成
     *
     * @param log Log对象
     * @return 插入的行数
     */
    Integer insertLog(Log log);

    /**
     * 插入LogPc 爬虫，主要是可以自定义sendtime
     *
     * @param log Log对象
     * @return 插入的行数
     */
    Integer insertLogPc(Log log);

    /**
     * 编辑Log，要比较里面的userid
     *
     * @param log Log对象
     * @return 受影响的行数
     */
    Integer updateLog(Log log);

    /**
     * 删除Log
     *
     * @param id 要删除的Log的id
     * @return 删除的条数
     */
    @Delete("DELETE FROM log WHERE id=#{id} AND userid=#{userid}")
    Integer deleteLog(Long id, Long userid);

}
